package com.bw.module_cinema.model.adapter

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bw.module_cinema.databinding.ItemTypeBinding
import com.bw.module_cinema.model.entity.VideoTypeEntity
/**
 * 视频类型列表适配器
 * 作用：将VideoTypeEntity数据与RecyclerView的列表项进行绑定展示
 */
class TypeAdapter() : RecyclerView.Adapter<TypeAdapter.TypeViewHolder>() {
    companion object{
        private const val TAG = "TypeAdapter"
    }

    // 定义点击事件回调接口
    interface OnTypeItemClickListener{
        fun onItemClick(id:Int)
    }

    private var listener : OnTypeItemClickListener? = null

    // 设置点击监听器
    fun setOnTypeItemClickListener(listener : OnTypeItemClickListener){
        this.listener = listener
    }

    // 数据集合：存储要展示的视频类型数据
    private val list = ArrayList<VideoTypeEntity>()

    /**
     * 更新适配器数据
     * @param mList 新的数据列表
     */
    fun setData(mList: List<VideoTypeEntity>){
        list.clear()
        list.addAll(mList)
        notifyDataSetChanged()
    }

    /**
     * 视图持有者
     * 作用：缓存列表项中的视图组件，避免重复查找
     */
    class TypeViewHolder(
        val binding:ItemTypeBinding
    ) : RecyclerView.ViewHolder(binding.root)

    // 创建ViewHolder（加载列表项布局）
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TypeViewHolder {
        // 加载列表项布局
        val binding = ItemTypeBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return TypeViewHolder(binding)
    }

    // 绑定数据到ViewHolder
    override fun onBindViewHolder(holder: TypeViewHolder, position: Int) {
        //数据绑定的优先级高于手动设置（框架会在生命周期中自动刷新绑定值）
        //直接给数据变量赋值，触发了数据绑定框架的自动同步机制
        val item = list[position]
        holder.binding.type = item
        // 给列表项设置点击事件
        // 2. 点击时传递当前项的pid
        holder.itemView.setOnClickListener {
            // 点击时回调，传入当前所有数据（用于新列表展示）
            listener?.onItemClick(item.id)
        }
    }

    // 获取数据总数
    override fun getItemCount(): Int {
        return list.size
    }
}